package cn.tedu.antcolonycommons.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * RedisTemplateUtils 工具类
 * @author NewRomantics
 */
@Component
public class RedisTemplateUtils {

    @Autowired
    private RedisTemplate<String,Serializable> redisTemplate;

    /**
     * 存值 设置过期时间
     * @param key
     * @param value
     * @param timeOut 毫秒
     */
    public void set(String key,Serializable value,Long timeOut){
        redisTemplate.opsForValue().set(key,value);
        if (timeOut!=null){
            redisTemplate.expire(key,timeOut, TimeUnit.MILLISECONDS);
        }
    }

    /**
     * 存值 默认 不设置过期时间
     * @param key
     * @param value
     */
    public void set(String key,Serializable value){
        set(key,value,null);
    }

    /**
     * 根据key 获取值
     * @param key
     * @return
     */
    public Serializable get(String key){
        return redisTemplate.opsForValue().get(key);
    }

    /**
     * 根据 key 删除值
     * @param key
     * @return
     */
    public Boolean delete(String key){
        return redisTemplate.delete(key);
    }


    /**
     * 批量删除
     * @param set
     * @return
     */
    public Long deleteBatch(HashSet<String> set){
        return redisTemplate.delete(set);
    }

    /**
     * 获取所有的key
     * @return
     */
    public Set<String> keys(){
        return redisTemplate.keys("*");
    }

    /**
     * 自动编号的新ID
     * @param s
     * @return
     */
    public Long getId(String s){
        return redisTemplate.opsForValue().increment(s);
    }


    /**
     * 从redis中获取key对应的过期时间;
     * 如果该值有过期时间，就返回相应的过期时间;
     * 如果该值没有设置过期时间，就返回-1;
     * 如果没有该key，就返回-2;
     * @param key
     * @return
     * MILLISECONDS 时间单位 毫秒
     */
    public long getexpire(String key)
    {
        return redisTemplate.opsForValue().getOperations().getExpire(key,TimeUnit.MILLISECONDS);
    }
}
